package com.atguigu.gmall.payment.controller;

import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.payment.config.AlipayConfig;
import com.atguigu.gmall.payment.service.AlipayService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

@RestController
@SuppressWarnings("all")
@RequestMapping("/api/payment/alipay")
public class AlipayController {

    @Autowired
    private AlipayService alipayService;

    /**
     * 调用支付宝接口产生支付页面
     * @param orderId 订单id
     * @return 返回支付页面
     */
    @GetMapping("/submit/{orderId}")
    public String createAlipayForm(@PathVariable("orderId") Long orderId){
        String payForm = alipayService.createAlipayForm(orderId);
        return payForm;
    }

    /**
     * 处理支付宝支付成功后同步回调,将地址重定向到支付成功html渲染页面请求地址
     * @param response 重定向到支付成功页面
     */
    @GetMapping("/callback/return")
    public void redirectUrl(HttpServletResponse response) throws IOException {
        response.sendRedirect(AlipayConfig.return_order_url);
    }

    /**
     * 支付宝处理完成用户支付成功后,异步通知支付结果给用户
     * @param paramsMap 支付提交参数
     * @return "success" 支付宝收到该结果,停止通知 如果未响应"success"做到最大努力通知 额外通知7次
     */
    @PostMapping("/callback/notify")
    public String notifyGmallResult(@RequestParam Map<String,String> paramsMap){
        String result = alipayService.notifyGmallResult(paramsMap);
        return result;
    }

    /**
     * 上方协商一致后,根据用户提交订单id退款
     * @param orderId 订单id
     * @return 退款结果
     */
    @GetMapping("/refund/{orderId}")
    public Result refund(@PathVariable("orderId") Long orderId){
        alipayService.refund(orderId);
        return Result.ok();
    }
}